home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / lib / gedit-2 / plugins / snippets / Exporter.py < prev    next >
Encoding:
Python Source  |  2009-04-14  |  3.5 KB  |  99 lines

  1. import os
  2. import tempfile
  3. import sys
  4. import shutil
  5.  
  6. from snippets.Library import *
  7. import ElementTree as et
  8. from Helper import *
  9.  
  10. class Exporter:
  11.         def __init__(self, filename, snippets):
  12.                 self.filename = filename
  13.                 self.set_snippets(snippets)
  14.  
  15.         def set_snippets(self, snippets):
  16.                 self.snippets = {}
  17.                 
  18.                 for snippet in snippets:
  19.                         lang = snippet.language()
  20.  
  21.                         if lang in self.snippets:
  22.                                 self.snippets[lang].append(snippet)
  23.                         else:
  24.                                 self.snippets[lang] = [snippet]
  25.  
  26.         def export_xml(self, dirname, language, snippets):
  27.                 # Create the root snippets node
  28.                 root = et.Element('snippets')
  29.                 
  30.                 # Create filename based on language
  31.                 if language:
  32.                         filename = os.path.join(dirname, language + '.xml')
  33.                         
  34.                         # Set the language attribute
  35.                         root.attrib['language'] = language
  36.                 else:
  37.                         filename = os.path.join(dirname, 'global.xml')
  38.                 
  39.                 # Add all snippets to the root node
  40.                 for snippet in snippets:
  41.                         root.append(snippet.to_xml())
  42.                 
  43.                 # Write xml
  44.                 write_xml(root, filename, ('text', 'accelerator'))
  45.  
  46.         def export_archive(self, cmd):
  47.                 dirname = tempfile.mkdtemp()
  48.                 
  49.                 # Save current working directory and change to temporary directory
  50.                 curdir = os.getcwd()
  51.                 
  52.                 try:
  53.                         os.chdir(dirname)
  54.                 
  55.                         # Write snippet xml files
  56.                         for language, snippets in self.snippets.items():
  57.                                 self.export_xml(dirname, language , snippets)
  58.                 
  59.                         # Archive files
  60.                         status = os.system('%s "%s" *.xml' % (cmd, self.filename))
  61.                 finally:
  62.                         os.chdir(curdir)
  63.                 
  64.                 if status != 0:
  65.                         return _('The archive `%s` could not be created' % self.filename)
  66.                 
  67.                 # Remove the temporary directory
  68.                 shutil.rmtree(dirname)
  69.  
  70.         def export_targz(self):
  71.                 self.export_archive('tar -c --gzip -f')
  72.         
  73.         def export_tarbz2(self):
  74.                 self.export_archive('tar -c --bzip2 -f')
  75.  
  76.         def export_tar(self):
  77.                 self.export_archive('tar -cf')
  78.         
  79.         def run(self):
  80.                 dirname = os.path.dirname(self.filename)
  81.                 if not os.path.exists(dirname):
  82.                         return _('Target directory `%s` does not exist') % dirname
  83.                 
  84.                 if not os.path.isdir(dirname):
  85.                         return _('Target directory `%s` is not a valid directory') % dirname
  86.                 
  87.                 (root, ext) = os.path.splitext(self.filename)
  88.                 
  89.                 actions = {'.tar.gz': self.export_targz,
  90.                            '.tar.bz2': self.export_tarbz2,
  91.                            '.tar': self.export_tar}
  92.  
  93.                 for k, v in actions.items():
  94.                         if self.filename.endswith(k):
  95.                                 return v()
  96.                         
  97.                 return self.export_targz()
  98. # ex:ts=8:et:
  99.